home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / mus / play / tracker_4_31.lzh / tracker / Arch / MM1 / audio.c next >
C/C++ Source or Header  |  1995-04-22  |  2KB  |  113 lines

  1. /* mm1/audio.c
  2.     vi:ts=3 sw=3:
  3.  */
  4.  
  5. /* $Id: audio.c,v 1.1 1995/04/22 17:49:58 espie Exp espie $
  6.  * $Log: audio.c,v $
  7.  * Revision 1.1  1995/04/22  17:49:58  espie
  8.  * Initial revision
  9.  *
  10.  */
  11.  
  12. #include "defs.h"
  13. #include "extern.h"
  14. #include <sound.h>
  15. #include <errno.h>
  16.  
  17. #define BUFSIZE 100000
  18. #define SIG_CODE 234
  19.  
  20.  
  21. #define DEFAULT_SET_MIX
  22. #define DEFAULT_BUFFERS
  23. #define NEW_OUTPUT_SAMPLES_AWARE
  24. #define UNSIGNED8
  25.  
  26. #include "Arch/common.c"
  27.  
  28. ID("$Id: audio.c,v 1.1 1995/04/22 17:49:58 espie Exp espie $)
  29.  
  30. LOCAL unsigned char *buffer1, *buffer2, *ptr, *curbuf;
  31. LOCAL int sample_rate, sigarrived;
  32. LOCAL int samples_max;
  33.  
  34. gotsignl()
  35. {
  36.    sigarrived = SIG_CODE;
  37. }
  38.  
  39. int open_audio(frequency, stereo)
  40. int frequency, stereo;
  41.     {
  42.    sample_rate = frequency ? frequency : 8000;
  43.    buffer1 = malloc(BUFSIZE);
  44.    buffer2 = malloc(BUFSIZE);
  45.    if ( buffer1 == NULL || buffer2 == NULL )
  46.       exit(_errmsg(errno, "cannot allocate buffers\n"));
  47.     buffer = buffer1;
  48.     idx = 0;
  49.     samples_max = BUFSIZE
  50.     /*
  51.    ptr = curbuf = buffer1;
  52.     */
  53.    sigarrived = 1;
  54.  
  55.    signal(SIG_CODE, gotsignl);
  56.  
  57.    return sample_rate;
  58.     }
  59.  
  60. void output_samples(left, right, n)
  61. int left, right, n;
  62.     {
  63.  
  64. void output_samples(left, right)
  65. int left, right;
  66.     {
  67.     if (idx >= samples_max - 1)
  68.         actually_flush_buffer();
  69.     
  70.     add_samples8(left, right, n);
  71.  
  72.  
  73. void actually_flush_buffers()
  74.     {
  75.     if (sigarrived == 0)
  76.         sleep(0);
  77.     sigarrived = 0;
  78.     _ss_play(1, buffer, idx, sample_rate, SND_SENDSIG, SIG_CODE);
  79.     if (buffer == buffer1)
  80.         buffer = buffer2;
  81.     else
  82.         buffer = buffer1;
  83.     idx = 0;
  84.    }
  85.  
  86. void flush_buffer()
  87.     {
  88.     }
  89.  
  90. void close_audio()
  91. {
  92.    _ss_play(1, curbuf, ptr - curbuf, sample_rate, SND_SENDSIG, SIG_CODE);
  93. }
  94.  
  95. /* dummy system calls, to patch ? */
  96. void set_synchro(s)
  97.     {
  98.     }
  99.  
  100. int update_frequency()
  101.     {
  102.    return 0;
  103.     }
  104.  
  105. void discard_buffer()
  106.     {
  107.     }
  108.  
  109. int output_resolution()
  110.     {
  111.     return 16;
  112.     }
  113.